package main

import (
    "fmt"
    "net"
)

func main() {
    interfaces, err := net.Interfaces()
    if err != nil {
        panic(err)
    }
	IPAddr := make(map[string]string)
    for _, iface := range interfaces {
        // 跳过未启用或环回接口
        if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
            continue
        }

        addrs, err := iface.Addrs()
        if err != nil {
            fmt.Printf("无法获取接口 %s 的地址: %v\n", iface.Name, err)
            continue
        }

        for _, addr := range addrs {
            var ip net.IP
            switch v := addr.(type) {
            case *net.IPNet:
                ip = v.IP
            case *net.IPAddr:
                ip = v.IP
            }

            if ip == nil || ip.IsLoopback() {
                continue
            }

            // 只输出有效的 IPv4 或 IPv6
            if ip.To4() != nil {
                fmt.Printf("接口 %s 的 IPv4 地址: %s\n", iface.Name, ip.String())
            } 
			
			IPAddr[iface.Name] = ip.String()
        }	
		
    }

	fmt.Printf("接口  MAC 地址: %v\n", IPAddr)
}
